home *** CD-ROM | disk | FTP | other *** search
- Path: chronicle.mti.sgi.com!austern
- From: mgb@kronecker.mitre.org (G. Mike Butler D054)
- Newsgroups: comp.std.c++
- Subject: Semantics of "new foo[0]"
- Date: 27 Feb 1996 15:13:07 PST
- Organization: The MITRE Corporation
- Approved: austern@isolde.mti.sgi.com
- Message-ID: <MGB.96Feb27175316@kronecker.mitre.org>
- NNTP-Posting-Host: isolde.mti.sgi.com
- X-Original-Date: 27 Feb 1996 22:53:16 GMT
- X-Auth: PGPMoose V1.1 PGP comp.std.c++
- iQBVAwUBMTOQFUy4NqrwXLNJAQHyAQH/Uqi0qICJ0/QkIcQKIPns4ov7R83Hw+XV
- eO/pcLOASDnwmB1VJmYtk17A0kOPKm2bJP0SK0zwhmTHfWST2KDbSg==
- =a22R
- Originator: austern@isolde.mti.sgi.com
-
- According to the ARM section 5.3.3:
- "operator new() can be called with the argument
- zero. Repeated such calls return pointers to
- distinct objects."
-
- But when I execute the following:
- #include <isotream.h>
- main()
- {
- struct foo { char a[1024]; };
- foo *p = new foo[0];
- foo *q = new foo[0];
-
- cout << (void *)p << " " << (void *)q << endl;
- }
-
- I get
- 0x338d8 0x338e8
-
- While these are distinct pointers, the pointers refer to overlapping
- objects. Is this a legitimate interpretation of section 5.3.3 or is
- this a compiler/library bug?
-
- Incidentally, the standard template library included with gcc 2.7.2
- relies on "operator new(0)" working.
-
- Thanks,
- -Mike Butler
- ---
- [ comp.std.c++ is moderated. To submit articles: Try just posting with your
- newsreader. If that fails, use mailto:std-c++@ncar.ucar.edu
- comp.std.c++ FAQ: http://reality.sgi.com/austern/std-c++/faq.html
- Moderation policy: http://reality.sgi.com/austern/std-c++/policy.html
- Comments? mailto:std-c++-request@ncar.ucar.edu
- ]
-